/**
 *
 */

// Classe FormView {{{
var FormView = Backbone.View.extend({
  events: {
    "reset": "limparFormulario"
  },
  initialize: function() {
    $.extend(this.events, FormView.prototype.events); // mescla eventos com da classe com os eventos das classes filhas.
    _.bindAll(this, "limparFormulario");
    $("fieldset > legend > #ajax-loader", this.el).hide();
    // {{{ Validação
    $.metadata.setType('attr', 'data-rules');
    $(this.el).validate({
      meta: "rules",
      errorPlacement: function (error, element) {
        $(element).parents("div.control-group").addClass("error");
        $(".help-inline", $(element).parents("div.controls")).text($(error).text()).fadeIn();
      },
      unhighlight: function(element, errorClass, validClass) {
        $(element).parents("div.control-group").removeClass("error");
        $(element).parents("div.control-group").removeClass("warning");
        $(".help-inline", $(element).parents("div.controls")).fadeOut();
      },
      submitHandler: function(formulario) {
        $(formulario).ajaxSubmit({
          dataType: "json",
          beforeSubmit: function() {
            $("#conteudo div.alert").remove();
            $("fieldset > legend > #ajax-loader", formulario).fadeIn();
          },
          success: function(respostaJson, statusText, xhr, $form) {
            $("fieldset > legend > #ajax-loader", formulario).fadeOut();
            if (respostaJson.sucesso === true) {
              var tituloMensagem = 'Informação';
              var tipoMensagem = 'info';
            } else {
              var tituloMensagem = 'Falha';
              var tipoMensagem = 'error';
            }
            $.pnotify({
              pnotify_title: tituloMensagem,
              pnotify_text: respostaJson.mensagem,
              pnotify_type: tipoMensagem
            });
            //
            $.each(respostaJson.campos,  function(campo, erro) {
              var objCampo = $("input[name='" + campo + "']", $form);
              if ($(objCampo).parents("div.control-group").hasClass("required")) {
                classe = "error";
              } else {
                classe = "warning";
              }
              $(objCampo).parents("div.control-group").addClass(classe);
              $(".help-inline", $(objCampo).parents("div.controls")).text(erro).fadeIn();
            });
          },
          statusCode: {
            '403': function() { // Forbidden
              $("#btnLogin").click();
            }
          }
        });
      }
    });
    //}}}
  },
  limparFormulario: function(e) {
    $("#conteudo div.alert").remove();
    $(".error", this.el).removeClass("error");
    $(".help-inline", this.el).fadeOut();
    $("[autofocus]", this.el).focus();
  }
});
//}}}